home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d939.lha / IanUtils / SetDepth.2.2.s < prev    next >
Text File  |  1993-12-20  |  8KB  |  388 lines

  1.     BRA.S    SetDepth
  2.  
  3.     Include    Libs/Exec.lib
  4.     Include    Libs/Dos.lib
  5.     Include    Libs/Intuition.lib
  6.     Include    Libs/Graphics.lib
  7.  
  8. SetDepth    MOVEM.L    D2-D7/A2-A6,-(A7)    ; Save registers
  9.  
  10.     MOVE.L    A0,A3    ; Save argument information
  11.     LEA    (A0,D0),A4
  12.  
  13.     OpenLib    Dos    ; Open Libraries
  14.     OpenLib    Graphics
  15.     OpenLib    Intuition
  16.  
  17.     SUB.L    #Space,A7    ; Set up data area
  18.     MOVE.L    A7,A5
  19.  
  20.     BSR    Initialize
  21.     BSR    Arguments
  22.     BSR    ChangeDepth
  23.  
  24. Exit    CloseLib    Intuition    ; Close libraries
  25.     CloseLib    Graphics
  26.     CloseLib    Dos
  27.  
  28.     MOVE.L    A5,A7    ; Nuke data area
  29.     ADD.L    #Space,A7
  30.  
  31.     MOVE.L    RC(A5),D0
  32.     MOVEM.L    (A7)+,D2-D7/A2-A6    ; Restore registers
  33.     RTS
  34.  
  35. Initialize    MOVE.L    A3,ArgList(A5)    ; Save argument information
  36.     MOVE.L    A4,ArgEnd(A5)
  37.     CLR.L    RC(A5)
  38.  
  39.     Dos    Output        ; Get Standard Output Channel
  40.     MOVE.L    D0,StdOutput(A5)
  41.  
  42.     Dos    Input
  43.     MOVE.L    D0,StdInput(A5)
  44.  
  45.     CLR.W    WhatDepth(A5)    ; Set WhatDepth to zero
  46.     CLR.B    WhatScreen(A5)    ; Set WhatScreen to WB Screen as default
  47.     CLR.L    WaitSecs(A5)        ; Set Wait delay to no wait
  48.  
  49.     RTS
  50.  
  51. ;-----------------------------------------------------------------------
  52.  
  53. Arguments    MOVE.L    ArgList(A5),A0
  54.     CMP.B    #10,(A0)    ; Is input just a return?
  55.     BEQ    DispInfo
  56.  
  57.     CMP.B    #"?",(A0)    ; Is input a question mark?
  58.     BNE.S    Not.QM
  59.     CMP.B    #" ",1(A0)
  60.     BLE    Input    ; If space/tab/return, show template
  61.  
  62. Not.QM    MOVE.L    ArgEnd(A5),A1
  63.     BSR    Capitalize
  64.  
  65. Check    MOVE.L    ArgList(A5),A0
  66.  
  67. CheckNext
  68.  
  69. CheckNum    CMP.B    #"0",(A0)
  70.     BLT.S    Not.Num
  71.     CMP.B    #"9",(A0)
  72.     BGT.S    Not.Num
  73.     BSR    GetDec
  74.     CMP.L    #8,D0
  75.     BHI    BadDepth
  76.     TST.L    D0
  77.     BEQ    BadDepth
  78.     MOVE.W    D0,WhatDepth(A5)
  79.     BRA.S    NextArg
  80. Not.Num
  81.  
  82. CheckWB    LEA    keyWB(PC),A1
  83.     BSR    Keyword
  84.     TST.L    D0
  85.     BEQ.S    Not.WB
  86.     CMP.B    #" ",(A0)
  87.     BGT.S    Not.WB
  88.     CLR.B    WhatScreen(A5)    ; Set WhatScreen to 0
  89.     BRA.S    NextArg
  90. Not.WB
  91.  
  92. CheckFRONT    LEA    keyFRONT(PC),A1
  93.     BSR    Keyword
  94.     TST.L    D0
  95.     BEQ.S    Not.FRONT
  96.     CMP.B    #" ",(A0)
  97.     BGT.S    Not.FRONT
  98.     MOVE.B    #-1,WhatScreen(A5)    ; Set WhatScreen to 1
  99.     BRA.S    NextArg
  100. Not.FRONT
  101.  
  102. CheckACTIVE    LEA    keyACTIVE(PC),A1
  103.     BSR    Keyword
  104.     TST.L    D0
  105.     BEQ.S    Not.ACTIVE
  106.     CMP.B    #" ",(A0)
  107.     BGT.S    Not.ACTIVE
  108.     MOVE.B    #1,WhatScreen(A5)    ; Set WhatScreen to 1
  109.     BRA.S    NextArg
  110. Not.ACTIVE    
  111.  
  112. CheckWAIT    LEA    keyWAIT(PC),A1
  113.     BSR    Keyword
  114.     TST.L    D0
  115.     BEQ.S    Not.WAIT
  116.     BSR    GetDec
  117.     MOVE.L    D0,WaitSecs(A5)    ; Set WaitSecs to WAIT=n value
  118. ;    BRA.S    NextArg
  119. Not.WAIT
  120.  
  121. FindEnd    CMP.B    #" ",(A0)
  122.     BLE.S    NextArg
  123.     TST.B    (A0)+
  124.     BRA.S    FindEnd
  125.  
  126. NextArg    CMP.B    #" ",(A0)
  127.     BGT    CheckNext    ; If a valid character, proceed
  128.     BLT.S    NoMoreArgs    ; If a return ($0A) encountered
  129.     TST.B    (A0)+
  130.     BRA.S    NextArg
  131. NoMoreArgs    RTS
  132.     
  133. ;-------------------------------------------------------------------------
  134.  
  135. ChangeDepth    MOVE.L    WaitSecs(A5),D4
  136.     BLE.S    NoDelay
  137.     LSL.L    D4
  138.     SUBQ.L    #1,D4
  139.     CMP.L    #$FFFF,D4
  140.     BLE.S    OkDelay
  141.     MOVE.L    #$FFFF,D4
  142.  
  143. OkDelay    MOVEQ    #0,D0
  144.     MOVEQ    #-1,D1
  145.     Exec    SetSignal
  146.  
  147.     BTST    #SIGBREAKB_CTRL_C,D0
  148.     BNE    Break
  149.     BTST    #SIGBREAKB_CTRL_F,D0
  150.     BNE    Abort
  151.  
  152.     MOVEQ    #TICKS_PER_SECOND/2,D1    ; Check each half second
  153.     Dos    Delay
  154.     DBF    D4,OkDelay
  155.  
  156. NoDelay    MOVE.L    _IntuitionBase(PC),A0
  157.     TST.B    WhatScreen(A5)
  158.     BGT.S    .ACTIVE
  159.     BLT.S    .FRONT
  160.     Intuition    OpenWorkBench    ; Get Workbench Screen Pointer
  161.     MOVE.L    D0,A4
  162.     BRA.S    StartDepth
  163. .FRONT    MOVE.L    ib_FirstScreen(A0),A4
  164.     BRA.S    StartDepth
  165. .ACTIVE    MOVE.L    ib_ActiveScreen(A0),A4
  166.  
  167. StartDepth    MOVEQ    #0,D0
  168.     MOVEQ    #-1,D1
  169.     Exec    SetSignal
  170.  
  171.     BTST    #SIGBREAKB_CTRL_C,D0    ; One last chance
  172.     BNE    Break
  173.     
  174.     MOVEQ    #8,D4
  175.     MOVE.W    WhatDepth(A5),D5
  176.     TST.W    D5
  177.     BEQ    ShowDepth
  178.  
  179.     LEA    $C0(A4),A3
  180.  
  181. AllocNext    TST.B    D5
  182.     BEQ.S    NewDepth
  183.     TST.L    (A3)
  184.     BNE.S    AlreadyAlloc
  185.     MOVEM.W    12(A4),D0-D1
  186.     ADD.W    #$F,D0    ROM subroutine
  187.     ASR.W    #3,D0
  188.     ANDI.W    #$FFFE,D0
  189.     MULU.W    D1,D0
  190.     MOVE.L    D0,-(A7)
  191.     MOVEQ    #3,D1    ROM AllocRaster modified to clear first
  192.     Exec    AllocMem
  193.     MOVE.L    (A7)+,A1
  194.     MOVE.L    D0,A0
  195.     MOVE.L    D0,(A3)    Put address into screen structure
  196.     ADD.L    D0,A1
  197.     MOVEQ    #0,D0
  198. .cloop    MOVE.W    D0,(A0)+
  199.     CMP.L    A0,A1
  200.     BNE.S    .cloop
  201. AlreadyAlloc    TST.L    (A3)+
  202.     SUBQ.B    #1,D4
  203.     SUBQ.B    #1,D5
  204.     BRA.S    AllocNext
  205.  
  206. NewDepth    MOVE.W    WhatDepth(A5),$BC(A4)
  207.     Intuition    RemakeDisplay
  208.     
  209. FreeNext    TST.B    D4
  210.     BEQ.S    DoneFree
  211.     TST.L    (A3)
  212.     BEQ.S    AlreadyFree
  213.     MOVEM.W    12(A4),D0-D1
  214.     MOVE.L    (A3),A0
  215.     Graphics    FreeRaster
  216.     MOVE.L    #0,(A3)    Clear address in screen structure
  217. AlreadyFree    TST.L    (A3)+
  218.     SUBQ.B    #1,D4
  219.     BRA.S    FreeNext
  220.     
  221. DoneFree    RTS
  222.  
  223. GetDec    MOVEQ    #0,D0
  224.     MOVEQ    #0,D1
  225.  
  226. NextDecDigit    MOVE.B    (A0)+,D0
  227.     SUB.B    #"0",D0
  228.     MULU.W    #10,D1
  229.     ADD.L    D0,D1
  230.     MOVE.B    (A0),D0
  231.     CMP.B    #"9",D0
  232.     BGT.S    DecDigError
  233.     CMP.B    #"0",D0
  234.     BGE.S    NextDecDigit
  235.     CMP.B    #",",D0
  236.     BEQ.S    EndDecOK
  237.     CMP.B    #" ",D0
  238.     BLE.S    EndDecOK
  239. DecDigError    MOVEQ    #-1,D0
  240.     RTS
  241. EndDecOK    MOVE.L    D1,D0
  242.     RTS
  243.     
  244. Input    MOVE.L    StdOutput(A5),D1
  245.     LEA    Template(PC),A0
  246.     MOVE.L    A0,D2
  247.     MOVE.L    #Template.-Template,D3
  248.     Dos    Write        ; Write template
  249.  
  250.     MOVE.L    StdInput(A5),D1
  251.     MOVE.L    ArgList(A5),D2
  252.     MOVE.L    #$100,D3        256 byte input buffer
  253.     Dos    Read        ; Read input
  254.  
  255.     MOVE.L    ArgList(A5),A0
  256.     LEA    (A0,D0),A0
  257.     MOVE.L    A0,ArgEnd(A5)
  258.     BRA    Arguments
  259.  
  260. DispInfo    MOVE.L    StdOutput(A5),D1
  261.     LEA    Info(PC),A0
  262.     MOVE.L    A0,D2
  263.     MOVE.L    #Info.-Info,D3
  264.     Dos    Write
  265.     BRA    Exit
  266.  
  267. Break    MOVE.L    StdOutput(A5),D1
  268.     LEA    BreakText(PC),A0
  269.     MOVE.L    A0,D2
  270.     MOVEQ    #BreakText.-BreakText,D3
  271.     Dos    Write
  272.     MOVE.L    #10,RC(A5)
  273.     BRA    Exit
  274.  
  275. Abort    MOVE.L    StdOutput(A5),D1
  276.     LEA    AbortText(PC),A0
  277.     MOVE.L    A0,D2
  278.     MOVEQ    #AbortText.-AbortText,D3
  279.     Dos    Write
  280.     MOVE.L    #5,RC(A5)
  281.     BRA    NoDelay
  282.  
  283. BadDepth    MOVE.L    StdOutput(A5),D1
  284.     LEA    BadDepthVal(PC),A0
  285.     MOVE.L    A0,D2
  286.     MOVEQ    #BadDepthVal.-BadDepthVal,D3
  287.     Dos    Write
  288.     MOVE.L    #10,RC(A5)
  289.     BRA    Exit
  290.  
  291. ShowDepth    MOVE.L    StdOutput(A5),D1
  292.     LEA    ShowDepthVal(PC),A0
  293.     MOVE.L    A0,D2
  294.     MOVEQ    #ShowDepthVal.-ShowDepthVal,D3
  295.     MOVE.W    $BC(A4),D0
  296.     ADD.B    #"0",D0
  297.     MOVE.B    D0,CurrDepth
  298.     Dos    Write
  299.     BRA    Exit
  300.  
  301. ;------------Keyword recognition function    11/29/91
  302. ;    Affects:    A0/A1/D0
  303.  
  304. ;    Input:    A0=Text to be checked
  305. ;        A1=Keyword to be checked against
  306. ;    Output:    D0=Length of text if match
  307. ;        D0=0 if no match
  308. ;        A0=End of text if match
  309. ;        A0=Start of text if no match
  310. ;        A1=Start of text if match
  311.  
  312. Keyword    MOVEQ    #0,D0
  313.     MOVE.L    A0,-(A7)
  314. .loop    CMP.B    (A0)+,(A1)+
  315.     BNE.S    .no
  316.     ADDQ.L    #1,D0
  317.     TST.B    (A1)
  318.     BNE.S    .loop
  319.     MOVE.L    (A7)+,A1
  320.     RTS
  321. .no    MOVE.L    (A7)+,A0
  322.     MOVEQ    #0,D0
  323.     RTS
  324.  
  325. ;------------Capitalization function    11/29/91
  326. ;    Affects:    A0/A1/D0
  327.  
  328. ;    Input:    A0=Start of text to be capitalized
  329. ;        A1=End of text to be checked
  330. ;    Output:    All lowercase letters between A0 and A1 are uppercased
  331.  
  332. Capitalize    MOVE.B    (A0),D0
  333.     CMP.B    #"a",D0    ; Is it less than "a"?
  334.     BLT.S    .NotSmall
  335.     CMP.B    #"z",D0    ; Is it greater than "z"?
  336.     BGT.S    .NotSmall
  337.     SUB.B    #32,D0    ; Capitalize it.
  338. .NotSmall    MOVE.B    D0,(A0)+
  339.     CMP.L    A1,A0
  340.     BLT.S    Capitalize
  341.     RTS
  342.  
  343.     RSRESET
  344. ArgList    RS.L    1
  345. ArgEnd    RS.L    1
  346. StdOutput    RS.L    1
  347. StdInput    RS.L    1
  348. RC    RS.L    1
  349. WaitSecs    RS.L    1
  350. WhatDepth    RS.W    1
  351. WhatScreen    RS.B    1    0=WBScreen,+=ActiveScreen,-=FrontScreen
  352.  
  353. Space    RS.W    0
  354.  
  355. keyWAIT    DC.B    "WAIT=",0
  356. keyWB    DC.B    "WB",0
  357. keyFRONT    DC.B    "FRONT",0
  358. keyACTIVE    DC.B    "ACTIVE",0
  359.  
  360.     DC.B    "$VER: SetDepth 2.2 (12/18/91)",0
  361.  
  362. Info    DC.B    10,27,"[32mSetDepth 2.2",27,"[0m - Screen Depth Control Utility - © 1991 Ian Einman",10,10
  363.     DC.B    "SetDepth WB WAIT=4 3 sets WorkBench to 8 colors after 4 seconds",10
  364.     DC.B    "SetDepth 1 FRONT sets front screen to 2 colors immediately",10,10
  365.     DC.B    27,"[33m",9,"Ian Einman",10
  366.     DC.B    9,"Attn: Product Registration",10
  367.     DC.B    9,"16810 McRae Road",10
  368.     DC.B    9,"Arlington, WA 98223",10,10,27,"[0m"
  369.     DC.B    "If you have no documentation, register by sending me $3.00.",10
  370.     DC.B    "You will recieve instructions and future info regarding updates.",10,10
  371. Info.
  372.  
  373. Template    DC.B    "WAIT=/N,WB/S,FRONT/S,ACTIVE/S,DEPTH/N: "
  374. Template.
  375.  
  376. BreakText    DC.B    "***Break",10
  377. BreakText.
  378.  
  379. AbortText    DC.B    "***Wait aborted",10
  380. AbortText.
  381.  
  382. BadDepthVal    DC.B    "Depth out of range (1 to 8)",10
  383. BadDepthVal.
  384.  
  385. ShowDepthVal    DC.B    "Current depth = "
  386. CurrDepth    DC.B    "0",10
  387. ShowDepthVal.
  388.